#include "Scheduler.h"

Scheduler::Scheduler(char max_thread_size, bool fairEnable)
: m_maxThreadNum(max_thread_size)
, m_fairEnable(fairEnable)
, m_curIndex(0)
{
}

int Scheduler::dispatch(int origIndex)
{
    if(m_fairEnable) {
        return SchedulerPolicy::DefaultStrategy;  // 如果开启fair lock，则全部写入 pool的queue中，依次执行
    }

    int realIndex = 0;
    if(SchedulerPolicy::DefaultStrategy == origIndex) {
        /**
         * 如果是默认策略信息，在[0, default_thread_size_) 之间的，通过 thread 中queue来调度
         * 在[default_thread_size_, max_thread_size_) 之间的，通过 pool 中的queue来调度
         */
        realIndex = m_curIndex++;
        if(m_curIndex >= m_maxThreadNum || m_curIndex < 0) {
            m_curIndex = 0;
        }
    } else {
        realIndex = origIndex;
    }

    return realIndex;  // 交到上游去判断，走哪个线程
}
